<?php

/**
 * Интерфейс сессии пользователя
 */
class ExplaySession implements iExplaySession {

	private static $uId = 0;
	private static $oUser = false;

	public function __construct () {}

	/**
	 * Инициализация сессии пользователя
	 * @return void
	 */
	public static function init () {
		if (self::$oUser !== false) {
			return false;
		}
		
		if ($uId = getSession('user_id')) {
			if (self::$oUser = ObjectsController::getInstance()->getObject (TypesController::getInstance()->getTypeByName ('user'), $uId)) {
				self::$uId = $uId;
			}
		}
		
		if (!self::$oUser) {
			$db = DBController::getInstance ();
			
			$sLogin = getCookie ('login');
			$sPassword = getCookie ('password');
			
			$oUserType = TypesController::getInstance()->getTypeByName ('user');
			
			$sel = new Selection;
			$sel->addType ($oUserType);
			$sel->addLimit (1);
			$sel->addFilter ('login', $sLogin);
			$sel->addFilter ('password', $sPassword);
			
			$aUId = $sel->getList ();
			self::$uId = isset ($aUId[0][0]) ? $aUId[0][0] : 0;
			
			if (!self::$oUser = ObjectsController::getInstance()->getObject ($oUserType, self::$uId)) {
				if ($sLogin == '' && $sPassword == '') {
					throw new CoreException (lang('user_not_found', __CLASS__));
				} else {
					self::destroy();
					redirect(HTTP_HOST);
				}
			}
			
			setSession ('user_id', self::$uId);
		}
		
		if (self::$oUser->getValue('gorup') != 3) {
			self::$oUser->setValue ('lastvisit', time());
			self::$oUser->save ();
		}
	}
	
	/**
	 * Завершение сессии
	 * @return void
	 */
	public static function destroy () {
		cmsSetCookie ('login', '', 0);
		cmsSetCookie ('password', '', 0);	
		$_SESSION['user_id'] = 0;
		self::$oUser = false;
	}
	
	/**
	 * Возвращает объект текущего пользователя
	 * @return Object
	 */
	public static function getUser () {
		return self::$oUser;
	}
	
	/**
	 * Возвращает id текущего пользователя
	 * @return integer
	 */
	public static function getUserId () {
		return self::$uId;
	}

}